﻿//Código desenvolvido por João Ribeiro e Bruno Marques.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Configuration;
using System.Windows.Forms;
using System.Data;

namespace GestaoContas
{
    class Sala
    {
        private string _connectionStringJardimBD;

        public Sala()
        {
            _connectionStringJardimBD = ConfigurationManager.ConnectionStrings["ConnectionStringJardimBD"].ConnectionString;
        }

        public Sala(string nomeSala, string observacoes)
        {
            _nomeSala = nomeSala;
            _observacoes = observacoes;
            _connectionStringJardimBD = ConfigurationManager.ConnectionStrings["ConnectionStringJardimBD"].ConnectionString;
        }

        public Sala(int salaId, string nomeSala, string observacoes)
        {
            _salaId = salaId;
            _nomeSala = nomeSala;
            _observacoes = observacoes;
            _connectionStringJardimBD = ConfigurationManager.ConnectionStrings["ConnectionStringJardimBD"].ConnectionString;
        }

        private int _salaId;

        public int SalaId
        {
            get { return _salaId; }
            set { _salaId = value; }
        }

        private string _nomeSala;

        public string NomeSala
        {
            get { return _nomeSala; }
            set { _nomeSala = value; }
        }

        private string _observacoes;

        public string Observacoes
        {
            get { return _observacoes; }
            set { _observacoes = value; }
        }

        /// <summary>
        /// Insere ou actualiza os dados de uma sala.
        /// </summary>
        /// <param name="altera">True, para a opção de alterar um registo; False, para criar um registo.</param>
        /// <returns>True, se o registo/actualização foi bem sucedido.</returns>
        public bool RegistoSala(bool altera)
        {
            bool salaGravada = true;
            if (altera)
            {
                string updateString = GetAlterarQueryString(_salaId);
                salaGravada = GravaSala(updateString);
            }
            else
            {
                string insertString = GetCriaQueryString();
                salaGravada = GravaSala(insertString);
            }

            return salaGravada;
        }

        /// <summary>
        /// Preenche o objecto Sala com os dados da sala pretendida
        /// </summary>
        /// <param name="nomeSala"></param>
        public void PreencheObjectoSala(string nomeSala)
        {
            string query = @"SELECT SalaId, NomeSala, Observacoes FROM Sala WHERE NomeSala = '" + nomeSala + "'";

            SqlCeConnection conn = new SqlCeConnection(_connectionStringJardimBD);
            conn.Open();
            try
            {
                using (SqlCeCommand cmd = new SqlCeCommand(query, conn))
                {
                    using (SqlCeDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        reader.Read();
                        _salaId = int.Parse(reader[0].ToString());
                        _nomeSala = reader[1].ToString();
                        _observacoes = reader[2].ToString();
                        reader.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Grava ou actualiza os dados na base de dados.
        /// </summary>
        /// <param name="query">Query de inserção ou actualização.</param>
        /// <returns>True, caseo a inserção/acutalização foi bem sucedida.</returns>
        private bool GravaSala(string query)
        {
            bool registoBemSucedido = true;
            try
            {
                SqlCeConnection conn = new SqlCeConnection(_connectionStringJardimBD);

                conn.Open();

                SqlCeCommand insertCommand = new SqlCeCommand(query, conn);

                insertCommand.Parameters.AddWithValue("@nomesala", _nomeSala);
                insertCommand.Parameters.AddWithValue("@observacoes", _observacoes);

                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters.Clear();
                insertCommand.Dispose();
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro na criação do educando!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                registoBemSucedido = false;
            }
            return registoBemSucedido;
        }

        /// <summary>
        /// Retorna a query para alteração de uma sala
        /// </summary>
        /// <param name="salaId"></param>
        /// <returns></returns>
        private string GetAlterarQueryString (int salaId)
        {
            return @"UPDATE Sala SET NomeSala = @nomesala, Observacoes = @observacoes WHERE SalaId = " + salaId;
        }

        /// <summary>
        /// Retorna a query para a criação de uma sala
        /// </summary>
        /// <returns></returns>
        private string GetCriaQueryString()
        {
            return @"INSERT INTO Sala (NomeSala, Observacoes) VALUES (@nomesala, @observacoes)";
        }
    }
}
